/*
 * Auto generated C++ header for Mass Effect 2.
 *	by _silencer.
 */

#ifndef UNREAL_SDK_GAME_GameFramework_H
#define UNREAL_SDK_GAME_GameFramework_H

#include "unreal_game_global.h"

namespace game
{
	using namespace unreal;

	struct BreakableStep
	{
		Float DamageThreshold; //offset = 0, size = 4
		Array<BreakableParticleSystem> ParticleEmitters; //offset = 4, size = 12
		StaticMesh* BreakMesh; //offset = 16, size = 4
		Byte Physics; //offset = 20, size = 1
		SoundCue* BreakSound; //offset = 24, size = 4

		/*
		BreakableParticleSystem
		*/
	};

	class GameBreakableActor: public KActor
	{
		DECLARE_PACKAGE_CLASS( GameBreakableActor, KActor, GameFramework )

	public:

		Array<Class*> DamageTypes; //offset = 692, size = 12
		Array<BreakableStep> BreakableSteps; //offset = 704, size = 12
		Int CurrentBreakableStep; //offset = 716, size = 4
		LightingChannelContainer ParticleLightingChannels; //offset = 720, size = 4
		Bool bParticlesAcceptLights: 1; //offset = 724, size = 4
		Bool bParticlesAcceptDynamicLights: 1; //offset = 724, size = 4

		void Destroyed();
		void HideAndDestroy();
		void BreakLastApart( Controller* EventInstigator, EmitterSpawnable* Emit, Int I, Vector SpawnLocation );
		void BreakStepApart( Int BrokenStep, EmitterSpawnable* Emit, Int I, Vector SpawnLocation );
		Bool IsValidDamageType( Class* inDamageType, Bool bValid );
		void TakeStepDamage( Int Damage, Controller* EventInstigator, Bool bIsBroken, Int BrokenStep );
		void TakeLastDamage( Int Damage, Controller* EventInstigator, Bool bIsBroken, Int BrokenStep );
		void TakeDamage( Float Damage, Controller* EventInstigator, Vector HitLocation, Vector Momentum, Class* DamageType, TraceHitInfo HitInfo, Actor* DamageCauser );
		void SetParticlesLighting( Emitter* Emit );
		Vector GetOffsetToWorld( Vector Offset );
	};

	enum EGameHUDColor
	{
		GHD_WHITE,
		GHD_BLACK,
	};

	class GameHUD: public HUD
	{
		DECLARE_PACKAGE_CLASS( GameHUD, HUD, GameFramework )

	public:

		Float TotalTitleDrawTime; //offset = 1152, size = 4
		Float TotalTitleFadeTime; //offset = 1156, size = 4
		Float TitleDrawStartTime; //offset = 1160, size = 4
		String ChapterTitleString; //offset = 1164, size = 12
		String ActTitleString; //offset = 1176, size = 12

		void StopDrawingChapterTitle();
		void StartDrawingChapterTitle( String ChapterName, String ActName, Float TotalDrawTime, Float TotalFadeTime );
		void SetHUDDrawColor( Byte eColor, Byte Alpha );
	};

	class GamePawn: public Pawn
	{
		DECLARE_PACKAGE_CLASS( GamePawn, Pawn, GameFramework )

	public:

		void GetTargetFrictionCylinder( Float CylinderRadius, Float CylinderHeight );
	};

	class GamePlayerController: public PlayerController
	{
		DECLARE_PACKAGE_CLASS( GamePlayerController, PlayerController, GameFramework )

	public:

		void ClientDisplayChapterTitle( Int DisplayChapter, Float TotalDisplayTime, Float TotalFadeTime, String ChapterName, String ActName );
		void DisplayChapterTitle( Int DisplayChapter, Float TotalDisplayTime, Float TotalFadeTime );
		void GetChapterStrings( Int eChapter, String ChapterName, String ActName );
	};

	class GamePlayerInput: public PlayerInput
	{
		DECLARE_PACKAGE_CLASS( GamePlayerInput, PlayerInput, GameFramework )

	public:
	};

	class GameProjectile: public Projectile
	{
		DECLARE_PACKAGE_CLASS( GameProjectile, Projectile, GameFramework )

	public:
	};

	class GameTypes: public Object
	{
		DECLARE_PACKAGE_CLASS( GameTypes, Object, GameFramework )

	public:
	};

	class GameVehicle: public SVehicle
	{
		DECLARE_PACKAGE_CLASS( GameVehicle, SVehicle, GameFramework )

	public:
	};

	class GameWeapon: public Weapon
	{
		DECLARE_PACKAGE_CLASS( GameWeapon, Weapon, GameFramework )

	public:
	};

	enum ERecoilStart
	{
		ERS_Zero,
		ERS_Random,
	};

	struct RecoilParams
	{
		Byte X; //offset = 0, size = 1
		Byte Y; //offset = 1, size = 1
		Byte Z; //offset = 2, size = 1
		Byte Padding; //offset = 3, size = 1
	};

	struct RecoilDef
	{
		Float TimeToGo; //offset = 0, size = 4
		Float TimeDuration; //offset = 4, size = 4
		Vector RotAmplitude; //offset = 8, size = 12
		Vector RotFrequency; //offset = 20, size = 12
		Vector RotSinOffset; //offset = 32, size = 12
		RecoilParams RotParams; //offset = 44, size = 4
		Rotator RotOffset; //offset = 48, size = 12
		Vector LocAmplitude; //offset = 60, size = 12
		Vector LocFrequency; //offset = 72, size = 12
		Vector LocSinOffset; //offset = 84, size = 12
		RecoilParams LocParams; //offset = 96, size = 4
		Vector LocOffset; //offset = 100, size = 12
	};

	class GameSkelCtrl_Recoil: public SkelControlBase
	{
		DECLARE_PACKAGE_CLASS( GameSkelCtrl_Recoil, SkelControlBase, GameFramework )

	public:

		Bool bBoneSpaceRecoil: 1; //offset = 152, size = 4
		RecoilDef Recoil; //offset = 156, size = 112
		Vector2D Aim; //offset = 268, size = 8
		Bool bPlayRecoil: 1; //offset = 276, size = 4
		Bool bOldPlayRecoil: 1; //offset = 276, size = 4
		Bool bApplyControl: 1; //offset = 276, size = 4
	};

	class GameActorFactoryBreakable: public ActorFactoryRigidBody
	{
		DECLARE_PACKAGE_CLASS( GameActorFactoryBreakable, ActorFactoryRigidBody, GameFramework )

	public:
	};

	class SeqAct_DisplayChapterTitleBase: public SequenceAction
	{
		DECLARE_PACKAGE_CLASS( SeqAct_DisplayChapterTitleBase, SequenceAction, GameFramework )

	public:

		Float TotalDisplayTime; //offset = 240, size = 4
		Float TotalFadeTime; //offset = 244, size = 4
	};
}

#endif
